package com.demo.livemanagement.timertask;

import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;

import com.demo.livemanagement.domain.LiveInformation;

public class LiveQueue<T> {

	private static LiveQueue<LiveInformation> queue;

	public static synchronized LiveQueue<LiveInformation> getInstance() {
		if (queue == null)
			queue = new LiveQueue<>();
		return queue;
	}

	private Queue<T> storage = new ConcurrentLinkedQueue<>();

	/** 将指定的元素插入队尾 */
	public void offer(T v) {
		storage.offer(v);
	}

	/** 队列的长度 */
	public int size() {
		return storage.size();
	}

	/** 检索，但是不移除队列的头，如果此队列为空，则返回 null */
	public T peek() {
		return storage.peek();
	}

	/** 检索，但是不移除此队列的头 */
	/** 此方法与 peek 方法的惟一不同是，如果此队列为空，它会抛出一个异常 */
	public T element() {
		return storage.element();
	}

	/** 检索并移除此队列的头，如果队列为空，则返回 null */
	public T poll() {
		return storage.poll();
	}

	/** 检索并移除此队列的头 */
	/** 此方法与 poll 方法的不同在于，如果此队列为空，它会抛出一个异常 */
	public T remove() {
		return storage.remove();
	}

	/** 队列是否为空 */
	public boolean empty() {
		return storage.isEmpty();
	}

	public boolean addAll(List<T> c) {
		return storage.addAll(c);
	}

	/** 打印队列元素 */
	public String toString() {
		return storage.toString();
	}
}
